home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1993 October: Windmill on DISC / ADC Developer CD (1993-10) (''Windmill On DISC'')_iso / Dev.CD Oct 93.iso / System Software / U.S. System Software / System 7 Pro™ Beta 11 / Development Tools / Sample Code / Standard Mail / CollaboDraw (w⁄DigiSign) / aevt.c next >
Encoding:
C/C++ Source or Header  |  1993-06-11  |  5.2 KB  |  238 lines  |  [TEXT/MPS ]

  1. /*-------------------------------------------------------------------------------------
  2.  *
  3.  * Simple Sample AOCE Application Framework
  4.  *
  5.  * ©1991-1993 Apple Computer
  6.  *
  7.  -------------------------------------------------------------------------------------*/
  8. /*
  9.  * aevt.c -- appleevents code
  10.  *
  11.  * change history:
  12.  *
  13.  * SJF        04/21/93        1.0b2        update to b2
  14.  * SJF        03/01/93        1.0b1        added digital signatures
  15.  * SJF        02/09/93        1.0b1        update to b1
  16.  * SJF        10/13/92        1.0d4        update to a11
  17.  * SJF        09/09/92        1.0d3        update to a9
  18.  * SJF        05/07/92        1.0d2        update to a6
  19.  * SJF        11/06/91        1.0d1        initial coding
  20.  *
  21.  */
  22.  
  23. #define    kGestaltTrap    0xA0AD
  24.  
  25. #ifndef __GESTALTEQU__
  26. #include <GestaltEqu.h>
  27. #endif
  28.  
  29. #ifndef __APPLEEVENTS__
  30. #include <AppleEvents.h>
  31. #endif
  32.  
  33. #ifndef __OCESTANDARDMAIL__
  34. #include <OCEStandardMail.h>
  35. #endif
  36.  
  37. #include "const.h"
  38. #include "trapAvailable.h"
  39. #include "myevents.h"
  40. #include "mytypes.h"
  41. #include "globals.h"
  42. #include "utils.h"
  43. #include "commands.h"
  44.  
  45. #include "aevt.h"
  46.  
  47. Boolean SupportsAEVT(void)
  48. {
  49.     OSErr err;
  50.     long response;
  51.     
  52.     if (!TrapAvailable(kGestaltTrap))
  53.         return false;
  54.     
  55.     err = Gestalt(gestaltAppleEventsAttr,&response);
  56.     if (err!=noErr)
  57.         return false;
  58.         
  59.     return (response && (response << gestaltAppleEventsPresent));
  60. }
  61.  
  62.  
  63. void DoHighLevelEvent(EventRecord *ev)
  64. {
  65.     OSErr err;
  66.     
  67.     err = AEProcessAppleEvent(ev);    
  68. //    if (err!=noErr)                        I get an error -1708 here: hlevent not accepted
  69. //        DoError(err);
  70. }
  71.  
  72.  
  73. void RegisterMyEvents(void)
  74. {
  75.     OSErr err;
  76.     
  77.     if (!SupportsAEVT())
  78.         return;
  79.     
  80.     err = AEInstallEventHandler(kCoreEventClass,kAEOpenApplication,(ProcPtr)&MyAEHandleOAPP,0L,false);
  81.     if (err!=noErr)
  82.         return;
  83.                 
  84.     err = AEInstallEventHandler(kCoreEventClass,kAEOpenDocuments,(ProcPtr)&MyAEHandleODOC,0L,false);
  85.     if (err!=noErr)
  86.         return;
  87.                 
  88.     err = AEInstallEventHandler(kCoreEventClass,kAEPrintDocuments,(ProcPtr)&MyAEHandlePDOC,0L,false);
  89.     if (err!=noErr)
  90.         return;
  91.                 
  92.     err = AEInstallEventHandler(kCoreEventClass,kAEQuitApplication,(ProcPtr)&MyAEHandleQUIT,0L,false);
  93.     if (err!=noErr)
  94.         return;            
  95. }
  96.  
  97.  
  98. pascal OSErr MyAEHandleOAPP(AppleEvent *theAppleEvent,AppleEvent *reply,long refCon)
  99. {
  100.     #pragma unused (reply,refCon)
  101.     OSErr err;
  102.  
  103.     CommNew();    // since we were opened without a document, we should make an empty one
  104.     
  105.     err = MyGotRequiredParams(theAppleEvent);
  106.     if (err!=noErr)
  107.         return err;
  108. }
  109.  
  110.  
  111. pascal OSErr MyAEHandleODOC(AppleEvent *theAppleEvent,AppleEvent *reply,long refCon)
  112. {
  113.     #pragma unused (reply,refCon)
  114.     FSSpec myFSS;
  115.     AEDescList docList;
  116.     OSErr err;
  117.     long index,itemsInList;
  118.     Size actualSize;
  119.     AEKeyword keywd;
  120.     DescType returnedType;
  121.     Size size;
  122.     Boolean diskForm;
  123.     LetterSpec myLetterSpec;
  124.     
  125.     err = AEGetParamDesc(theAppleEvent,keyDirectObject,typeAEList,&docList);
  126.     if (err!=noErr)
  127.         return err;
  128.     
  129.     err = MyGotRequiredParams(theAppleEvent);
  130.     if (err!=noErr)
  131.         return err;
  132.     
  133.     err = AECountItems(&docList,&itemsInList);
  134.     for (index=1; index<=itemsInList; index++) {
  135.         err = AESizeOfNthItem(&docList, index, &returnedType, &size);
  136.         if (err!=noErr)
  137.             return err;
  138.  
  139.         if (returnedType == typeLetterSpec) {
  140.             diskForm = false;
  141.             err = AEGetNthPtr(&docList,index,typeLetterSpec,&keywd,&returnedType,(Ptr)&myLetterSpec,
  142.                             sizeof(LetterSpec),&actualSize);
  143.         } else {
  144.             diskForm = true;
  145.             err = AEGetNthPtr(&docList,index,typeFSS,&keywd,&returnedType,(Ptr)&myFSS,
  146.                             sizeof(myFSS),&actualSize);
  147.         }
  148.  
  149.         if (err!=noErr)
  150.             return err;
  151.             
  152.         err = HandleOpenDoc(diskForm, &myFSS, &myLetterSpec);
  153.         if (err!=noErr)
  154.             return err;
  155.     }
  156.     err = AEDisposeDesc(&docList);
  157.     return noErr;
  158. }
  159.  
  160.  
  161. pascal OSErr MyAEHandlePDOC(AppleEvent *theAppleEvent,AppleEvent *reply,long refCon)
  162. {
  163.     #pragma unused (reply,refCon)
  164.     FSSpec myFSS;
  165.     AEDescList docList;
  166.     OSErr err;
  167.     long index,itemsInList;
  168.     Size actualSize;
  169.     AEKeyword keywd;
  170.     DescType returnedType;
  171.     Size size;
  172.     Boolean diskForm;
  173.     LetterSpec myLetterSpec;
  174.     
  175.     err = AEGetParamDesc(theAppleEvent,keyDirectObject,typeAEList,&docList);
  176.     if (err!=noErr)
  177.         return err;
  178.     
  179.     err = MyGotRequiredParams(theAppleEvent);
  180.     if (err!=noErr)
  181.         return err;
  182.     
  183.     err = AECountItems(&docList,&itemsInList);
  184.     for (index=1; index<=itemsInList; index++) {
  185.         err = AESizeOfNthItem(&docList, index, &returnedType, &size);
  186.         if (err!=noErr)
  187.             return err;
  188.  
  189.         if (returnedType == typeLetterSpec) {
  190.             diskForm = false;
  191.             err = AEGetNthPtr(&docList,index,typeLetterSpec,&keywd,&returnedType,(Ptr)&myLetterSpec,
  192.                             sizeof(LetterSpec),&actualSize);
  193.         } else {
  194.             diskForm = true;
  195.             err = AEGetNthPtr(&docList,index,typeFSS,&keywd,&returnedType,(Ptr)&myFSS,
  196.                             sizeof(myFSS),&actualSize);
  197.         }
  198.  
  199.         if (err!=noErr)
  200.             return err;
  201.             
  202.         err = HandlePrintDoc(diskForm, &myFSS, &myLetterSpec);
  203.         if (err!=noErr)
  204.             return err;
  205.     }
  206.     err = AEDisposeDesc(&docList);
  207.     return noErr;
  208. }
  209.  
  210.  
  211. pascal OSErr MyAEHandleQUIT(AppleEvent *theAppleEvent,AppleEvent *reply,long refCon)
  212. {
  213.     #pragma unused (reply,refCon)
  214.     OSErr err;
  215.     
  216.     err = MyGotRequiredParams(theAppleEvent);
  217.     if (err!=noErr)
  218.         return err;
  219.     
  220.     gDone = true;
  221. }
  222.  
  223.  
  224. OSErr MyGotRequiredParams(AppleEvent *theAppleEvent)
  225. {
  226.     DescType returnedType;
  227.     Size actualSize;
  228.     OSErr err;
  229.     
  230.     err = AEGetAttributePtr(theAppleEvent,keyMissedKeywordAttr,typeWildCard,
  231.                             &returnedType,nil,0,&actualSize);
  232.     if (err == errAEDescNotFound)
  233.         err = noErr;
  234.     else if (err==noErr)
  235.         err = errAEEventNotHandled;
  236.     return err;
  237. }
  238.